import sys

import cv2
import numpy as np
from adbutils import adb
from loguru import logger

from api.OCR_Words import getWords
from api.Command import Command
from minidevice import MiniDevice
from minidevice.maatouch import MaaTouch
from minidevice.minicap import MiniCap

# 测试设备的Width Height
PreWidth = 2400
PreHeight = 1080

# 设备的宽度
DeviceWidth = -1
# 设备的高度
DeviceHeight = -1


def initDeviceCommand(id: int = 0):
    """
    初始化设备
    :param id: 设备的索引号(0/1/2...)
    :return: 设备的可操作指令
    """
    # 删去import logger之后自动产生的handler，不删除的话会出现重复输出的现象
    logger.remove()
    # 添加一个可以修改控制的handler
    handler_id = logger.add(sys.stderr, level="INFO")
    # handler_id = logger.add(sys.stderr, level="DEBUG")

    # a = MiniDevice(getDevice(0), None, MaaTouch)
    device = MiniDevice(getDevice(id), MiniCap, MaaTouch)

    global DeviceWidth, DeviceHeight
    # 更新设备的宽高
    DeviceWidth = device.width()
    DeviceHeight = device.height()

    # 初始化指令
    command = Command(device)

    # 初始化OCR
    img: cv2.Mat = np.zeros((DeviceWidth, DeviceHeight, 3), np.uint8)
    getWords(img)

    return command


def getDevice(idx):
    '''
    根据索引号获得设备的id
    :param idx: 索引号
    :return: 设备id
    '''
    # 获得所有设备列表
    devices = adb.device_list()
    # 获得第一个设备的序列号
    device_id = devices[idx].serial
    return device_id
